

package com.zsrt.devbase.service;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

/**
 * 通用接口
 */
@Service
public interface IService<T> {

	/**
	 * 根据主键查询
	 * @param key
	 * @return
	 */
    T selectByKey(String key);
    
    /**
     * 根据实体的不为空的属性查询，只能返回一条数据，出现多条返回空
     * @param entity
     * @return
     */
    T selectOne(T entity);
    
    /**
     * 根据实体的不为空的属性查询集合
     * @param entity
     * @return
     */
    List<T> select(T entity);
    
    /**
     * 保存数据
     * @param entity
     * @return
     */
    boolean save(T entity);
    
    /**
     * 根据主键删除 
     * @param key
     * @return
     */
    int deleteByPrimaryKey(String key);

    /**
     * 根据主键更新、更新所有属性对应的字段
     * @param entity
     * @return
     */
    int updateByPrimaryKey(T entity);

    /**
     * 根据主键更新、属性不为空的才会更新
     * @param entity
     * @return
     */
    int updateNotNull(T entity);

    /**
	 * 会校验数据是否在数据库中存在 ，如果不存在，则新增数据
	 * @param entity
	 * @return 返回 null，则保存成功，否则为错误信息
	 */
	public Map<String, Object> checkAndSave(T entity);
    
    /**
     * 更新实体
     * @param entity 实体
     * @param isUpdateNull ：true表示null值会被更新
     * @return
     */
    public Map<String, Object> checkAndUpdate(T entity,boolean isUpdateNull);
    
	/**
	 * 校验实体数据是否符合业务要求
	 * @param entity
	 * @return 错误信息
	 */
	public Map<String,Object> check(T entity);
	
	/**
	 * 根据所有entity非空属性进行查询是否有相同记录存在
	 * @param entity 实体
	 * @return
	 */
	public Map<String, Object> checkEntityExists(T entity);
	
}
